﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using Sauvegarde;


namespace Modele
{
    public class Modele
    {
        /**
* @author Quentin Leguay 4Info INSA Rennes 
* @date Avril 2010
* @brief La classe Moidele est la classe qui contrôle les données
         */

        /***************/
        /** attributs **/
        /***************/
        private general.Logiciel logiciel;

        private ProjetBlocNote pjbn;

        /***************/
        /**  méthodes **/
        /***************/

        //constructeur
        public Modele(general.Logiciel _logiciel)
        {
            logiciel = _logiciel;
            pjbn = new ProjetBlocNote();
        }

        /**
        * @brief addStroke
        * @brief ajoute un stroke au calque courant
        * @return void
        */
        public List<Microsoft.Ink.Stroke> addStroke(Microsoft.Ink.Stroke _stroke)
        {
           return pjbn.add(_stroke);
        }

        /**
        * @brief addStroke
        * @brief ajoute un stroke au calque courant
        * @return void
        */
        /*
        public void deleteStroke(Microsoft.Ink.Stroke _stroke)
        {
            pjbn.delete(_stroke);
        }
        */


        /**
        * @brief addInk
        * @brief ajoute un  ink au calque courant
        * @return void
        */
        public List<Microsoft.Ink.Stroke> addInk(Microsoft.Ink.Ink _ink, Microsoft.Ink.DrawingAttributes _attributes)
        {
            return pjbn.add(_ink, _attributes);
        }

        /**
        * @brief addBalise
        * @brief ajoute une Balise au calque courant
        * @return void
        */
        public void addBalise(Balise _balise)
        {
            pjbn.add(_balise);
        }


        
        /**
        * @brief analyserStroke
        * @brief demande au logiciel de reconnaitre un stroke
        * @return bool reconnu : indique si le stroke a été reconnu ou non
        * /!\ A COMPLETER
        */
        public bool analyserStroke(Microsoft.Ink.Stroke _stroke)
        {
            Console.WriteLine("Reconnaissance du trait.....");

            // si reconnu, on l'ajoute au modèle et on rend true
            // sinon on rend false

            return false;
        }

        /********************
        * FONCTIONS D'ACCES *
        *********************/

        /**
        * @brief getCalqueCourant
        * @brief rend le calque courant
        * @return Calque : le calque courant
        */
        public Calque getCalqueCourant()
        {
            return pjbn.getCalqueCourant();
        }

        /**
        * @brief getCombinedInk
        * @brief rend le Ink contenant les Strokes de tous les calques non courants
        * @return Microsoft.Ink.Ink : l'Ink contenant les Strokes de tous les calques non courants
        */
        public Microsoft.Ink.Ink getCombinedInk()
        {
            return pjbn.getCombinedInk();
        }

        public ArrayList getCombinedAnnotations()
        {
            return pjbn.getCombinedAnnotations();
        }

        public void changeVisibility(int numero_calque)
        {
            pjbn.changeVisibility(numero_calque);
        }

        /**
        * @brief deleteStroke(_stroke)
        * @brief supprime le stroke dans le calque courant
        * @return bool réussi : si le stroke a été supprimé
        */
        public void deleteStroke(Microsoft.Ink.Stroke _stroke)
        {
            pjbn.deleteStroke(_stroke);
        }

        /**
         * accesseur à l'attribut pjbn
         */
        public ProjetBlocNote getProjet()
        {
            return pjbn;
        }

        /**
         * setteur pour l'attribut pjbn
         */
        public void setProjet(ProjetBlocNote p)
        {
            pjbn = p;
        }

        public void sauver(String nomFichier)
        {
            writer1 w = new writer1(this);
            w.ecrireUPX(nomFichier);
        }

        public void ouvrir(String nomFichier)
        {
            reader1 r = new reader1(this);
            r.lireUPX(nomFichier);
        }

    }
}
